#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
int arr[N];
int index;
int n, m;
int size1;
//void down(int k)
//{
//	int t = k;
//	if (t * 2 <= n && arr[t] < arr[t * 2]) {
//		t = 2 * k;
//	}
//	if (t * 2 + 1 <= n && arr[t] > arr[t * 2 + 1]) {
//		t = 2 * k + 1;
//	}
//	if (t != k) {
//		swap(arr[t], arr[k]);
//		down(t);		
//	}
//}
void down(int k)
{
	int t = k;
	if (k * 2 <= n && arr[t] > arr[2 * k]) {
		t = 2 * k;
	}
	if (k * 2 + 1 <= n && arr[t] > arr[2 * k + 1]) {
		t = 2 * k + 1;
	}
	if (k != t) {
		swap(arr[k], arr[t]);
		down(t);
	}
}
void up(int k)
{
	while (k / 2 && arr[k / 2] > arr[k]) {
		swap(arr[k / 2], arr[k]);
		k /= 2;
	}
}
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> arr[i];
	}
	size1 = n;
	for (int i = n / 2; i; i--) {
		down(i);
	}
	while (m--) {
		cout << arr[1] << " ";
		arr[1] = arr[n--];
		down(1);
	}
	return 0;
}